// function t() {
//     var arr = [1, 2, 3]
//     t = function () {
//         return arr
//     }
//     return t()
// }

// console.log(t());


// console.log(t());

// const cryptoJs = require('crypto-js');

// // 加密 Base64
// console.log(cryptoJs.enc.Base64.stringify(cryptoJs.enc.Utf8.parse('123456')));


// 闭包定义 内层 函数可以访问 外层函数的变量
// 闭包的 使用形式 外部需要 访问函数内部的 变量
// function fn () {
//     let a =1
//     function fun() {
//         return a
//     }
//     return fun()
// }

// console.log(fn());
// 把所有 用var定义的变量 的声明提升到当前作用域的最前面
// 只提升声明 不提升赋值
// var num
// console.log(num);

// num = 1



// function fn () {
//     let sum = 0
//     for(let key of arguments) {
//         sum+=key

//     }
//     return sum
// }

// console.log(fn(7, 9));

// function fn(a, b, ...arr) {
//     console.log(arr);
// }

// fn(1, 2)

// const arr = [1, 2, 3]

// const obj = {
//     name: 'zhangsan',
//     age: 18
// }

// console.log(...arr);

// console.log({...obj});

// 展开运算符 一般用于 求数组最大值 和 合并数组

// const fn = () => ({ uname: 'zhangsan' })
// console.log(fn());

// const arr = [1, 2, 3]

// 数组 解构
// const [a, b, c] = arr
// console.log(a, b, c);

// 数组的解构： 是将 数组的单元值 批量赋值给 一系列变量 的简洁写法

// let a = 1

// let b = 2

//     ;[b, a] = [a, b]

// console.log(a, b);

// let uname = 'zhangsan'

// // 对象解构 必须保证 变量名 和 对象的属性名 一致
// const { uname: username, age } = { uname: 'zhangsan', age: 18 }

// console.log(username, age);














